package com.atguigu.mybatis.lamda;

import java.util.Comparator;

/**
 * Created by Smexy on 2022/11/29
 *
 *  lamda:  函数
 *      lamda表达式： 函数(方法)表达式。用一个表达式，表示一个方法
 *
 *
 *      java8之后，有更简便的方法去替换匿名内部类，就是lamda表达式。
 *
 *      语法格式:
 *          (参数列表) -> {方法体}
 *              (参数列表): 参数类型，可以省略，由编译器去推导
 *                         参数个数为1，()也可以省略！
 *
 *               {方法体}：  如果只有一行，可以省略{}
 *                          如果只有一行，return 可以省略，;可以省略
 *
 *       如果要使用的接口是函数式接口，可以使用 lamda表达式 为接口创建一个匿名实例。
 *
 *       函数式接口： 接口中只有一个抽象方法(只声明，未实现(没有写{}))！
 *                  会标注注解 @FunctionalInterface.
 *
 *                  lamda表达式，需要表名这个唯一的抽象方法如何去实现！
 *
 *
 *
 */
public class LamdaDemo
{
    public static void main(String[] args) {

        //匿名内部类
        //使用场景： 接口你只用一次，省去编写实现类的过程
        Comparator<Integer> c1 = new Comparator<Integer>()
        {

            public int compare(Integer o1, Integer o2) {
                return o1.compareTo(o2);
            }
        };

        System.out.println(c1.compare(1, 2));

        System.out.println("------------------------");

        Comparator<Integer> c2 = ( o1,  o2) ->  o1.compareTo(o2);

        System.out.println(c2.compare(1, 2));

        System.out.println("------------------------");

        // 不要重复造轮子。 如果lamda表达式的参数列表及方法实现和 某个类的某个方法是一样的，可以直接引用那个类的方法！
        // 方法引用(式lamda表达式的一个特殊场景)
        Comparator<Integer> c3 = Integer::compare;

        System.out.println(c3.compare(1, 2));


    }
}
